<?php
/**
 * @ClassName: GenQrcode
 * @Description: 生成二维码
 * @author: gydtrade
 * @Date: 2025-10-16 13:24
 * @Version: V1.0.0
 */

namespace app\common\utils;

use think\Exception;

class GenQrcode
{
    /**
     * 获取模板卡片
     * @param $card_path [模板路径]
     * @return array
     */
    protected static function getCard($card_path = "")
    {
        // 设置默认
        if (!$card_path) {
            $card_path = "./template/qrcode-bg.png";
        }

        // 将模版路径中的“./”替换为“/”
        $card_path2 = str_replace("./", "/", $card_path);

        // 判断模版是否存在
        if (!file_exists($card_path)) {
            return ['code' => 0, 'msg' => '模板文件不存在', "data" => ''];
        }

        return ['code' => 1, 'msg' => '模板文件获取成功', "data" => $card_path, "card_path2" => $card_path2];
    }

    /**
     * 图片地址转成图像数据流
     * @param $file_path [图片路径]
     * @return array
     */
    protected static function getImgData($file_path = "")
    {
        if (!$file_path) {
            return ['code' => 0, 'msg' => '文件未上传'];
        }
        // 网络图片地址
        if (strpos($file_path, "http") > -1) {
            // 将路径中的“./http”替换为“http”
            $file_path = str_replace("./http", "http", $file_path);
        } else {
            if (!file_exists($file_path)) {
                return ['code' => 0, 'msg' => '文件不存在'];
            }
        }

        //远程文件
        if (stripos($file_path, 'http') !== false) {
            if (stripos($file_path, 'https') !== false) {
                $file_path = str_replace('https', 'http', $file_path);
            }
            if (!is_dir('./remote_img/')) {
                mkdir('./remote_img/');
            }

            $cache_file_path = './remote_img/' . md5($file_path) . '.cache';
            if (!is_file($cache_file_path)) {
                $fileData = file_get_contents($file_path, false, stream_context_create(array('ssl' => array('verify_peer' => false, 'verify_peer_name' => false))));
                file_put_contents($cache_file_path, $fileData);
            }

            $file_path = $cache_file_path;
        }

        // 转化
        $imgData = imagecreatefromstring(file_get_contents($file_path, false));

        // 返回
        return ['code' => 1, 'msg' => '转换成功', "data" => $imgData];
    }

    /**
     * 生成二维码
     * @param $url [二维码内地址]
     * @param $member [会员信息]
     * @param $type [二维码类型]
     * @param $qr_file [二维码存放地址]
     * @param $isLogo [是否带Logo]
     * @return array
     */
    public static function makeQr($url, $member, $type = 'member', $qr_file = "", $isLogo = true)
    {
        try {
            // 引进依赖
            require_once app()->getRootPath() . 'vendor/dh2y/think-qrcode/src/phpqrcode/phpqrcode.php';

            // 二维码参数
            $size = 5; // 大小
            // 纠错级别：L、M、Q、H
            $level = 'H';

            // 设置二维码默认地址
            if (!$qr_file) {
                $qr_file = app()->getRuntimePath() . 'temp/qr' . time() . '.png';
            }

            // 生成一张二维码
            \QRcode::png($url, $qr_file, $level, $size);

            // 判断二维码是否生成成功
            if (!file_exists($qr_file)) {
                return ["code" => 0, "msg" => "二维码生成失败-1"];
            }

            //二维码上生成Logo或头像
            if ($isLogo) {
                $res = self::makeLogoQr($qr_file, replace_url($member['avatar']), $member['id'], $type);

                if (isset($res["data"]) && $res["data"]) {
                    return ["code" => 1, "msg" => "带Logo二维码生成成功", "data" => $res["data"], "url" => $url];
                }
            }

            // 返回数据
            return ["code" => 1, "msg" => "二维码生成成功", "data" => $qr_file, "url" => $url];
        } catch (\Exception $e) {
            var_dump($e->getMessage());
            trace($e);
        }

        return ['code' => 0, 'msg' => '二维码生成失败-2'];
    }

    /**
     * 生成带Logo二维码
     * @param $qr
     * @param $logo
     * @return array
     * @throws \Exception
     */
    protected static function makeLogoQr($qr, $logo, $member_id = 0, $type = 'member')
    {
        try {
            // 引进依赖
            require_once app()->getRootPath() . 'vendor/dh2y/think-qrcode/src/phpqrcode/phpqrcode.php';

            if (empty($logo)) {
                $logo = replace_url('/static/images/logo.png');
            }

            //微信在线头像转为本地图片
            $subStr = "/https:\/\/thirdwx.qlogo.cn/";
            if (preg_match($subStr, $logo)) {
                $logo = self::imageConversion($member_id, $logo);
                if (!$logo) {
                    return ["code" => 0, "msg" => "头像不存在", "data" => []];
                }
            }

            // 设置二维码默认地址
            $qr_file_path = './static/qr/' . $type . '/';
            $qr_file = $qr_file_path . $member_id . '.png';
            var_dump($qr_file_path);
            if (!is_dir($qr_file_path)) {
                mkdir($qr_file_path);
            }

            $qr = imagecreatefromstring(file_get_contents($qr));

            //原图
//            $logo = imagecreatefromstring(file_get_contents($logo));

            //剪裁图片为正方形
            /*$new_logo = app()->getRuntimePath() . 'temp/square_logo' . time() . '.png';
            self::cropToSquare($logo, $new_logo);
            $logo = imagecreatefromstring(file_get_contents($new_logo));*/

            //等比缩放图片为正方形
            $new_logo_path = './static/qr/' . $type . '/scaling/';
//            $new_logo = app()->getRuntimePath() . 'temp/scaling_logo' . time() . '.png';
            $new_logo = $new_logo_path . $member_id . '.png';
            var_dump($new_logo_path);
            if (!is_dir($new_logo_path)) {
                mkdir($new_logo_path);
            }
            self::proportionalScaling($logo, $new_logo);
            $logo = imagecreatefromstring(file_get_contents($new_logo));

            $qr_width = imagesx($qr);//二维码图片宽度
            $qr_height = imagesy($qr);//二维码图片高度
            $logo_width = imagesx($logo);//logo图片宽度
            $logo_height = imagesy($logo);//logo图片高度
            $logo_qr_width = $qr_width / 5;
            $scale = $logo_width / $logo_qr_width;
            $logo_qr_height = $logo_height / $scale;
            $from_width = ($qr_width - $logo_qr_width) / 2;
            //重新组合图片并调整大小
            //$dst_image：‌指定目标图像资源，‌即新创建的图像资源。‌
            //$src_image：‌指定源图像资源，‌即原始图像。‌
            //$dst_x 和 $dst_y：‌定义目标图像中放置重采样图像的起始坐标。‌
            //$src_x 和 $src_y：‌定义源图像中用于重采样的区域起始坐标。‌
            //$dst_w 和 $dst_h：‌定义目标图像的宽度和高度。‌
            //$src_w 和 $src_h：‌定义源图像的宽度和高度。‌
            imagecopyresampled($qr, $logo, $from_width, $from_width, 0, 0, $logo_qr_width,
                $logo_qr_height, $logo_width, $logo_height);

            //重新生成二维码图片
            imagepng($qr, $qr_file);

            //将路径中的“./”替换为“/”
            $qr_file = str_replace("./", "/", $qr_file);

            // 返回数据
            $data = ["code" => 1, "msg" => "二维码生成成功", "data" => $qr_file];

            return $data;
        } catch (\Exception $e) {
            throw $e;
        }
    }

    /**
     * 微信在线头像转换成PNG格式
     * @param $member_id
     * @param $url
     * @return string
     */
    static function imageConversion($member_id, $url)
    {
        $header = array(
            'User-Agent: Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:45.0) Gecko/20100101 Firefox/45.0',
            'Accept-Language: zh-CN,zh;q=0.8,en-US;q=0.5,en;q=0.3',
            'Accept-Encoding: gzip, deflate',
        );

        $curl = curl_init();

        curl_setopt($curl, CURLOPT_URL, $url);
        curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
        curl_setopt($curl, CURLOPT_FOLLOWLOCATION, true);
        curl_setopt($curl, CURLOPT_ENCODING, 'gzip');
        curl_setopt($curl, CURLOPT_HTTPHEADER, $header);
        $data = curl_exec($curl);
        $code = curl_getinfo($curl, CURLINFO_HTTP_CODE);

        curl_close($curl);
        if ($code == 200) {//把URL格式的图片转成base64_encode格式的！
            $imgBase64Code = "data:image/jpeg;base64," . base64_encode($data);
        }
        $img_content = $imgBase64Code;//图片内容
        $avatar_path = app()->getRuntimePath() . "temp/avatar/";
        if (preg_match('/^(data:\s*image\/(\w+);base64,)/', $img_content, $result)) {
            $type = $result[2];//得到图片类型png?jpg?gif?
//            $new_file = "./member_share/{$member_id}.{$type}";
            //检查文件夹是否存在，不存在先创建
            if (!is_dir($avatar_path)) {
                mkdir($avatar_path, 0755, true);
            }
            $new_file = $avatar_path . time() . "_{$member_id}.png";
            if (file_put_contents($new_file, base64_decode(str_replace($result[1], '', $img_content)))) {
                return $new_file;
            }
        }
        return "";
    }

    /**
     * 等比缩放
     * @param $sourceFile [源图片路径]
     * @param $targetFile [目标图片路径]
     * @param $scale [缩放比例]
     * @return void
     * @throws Exception
     */
    protected static function proportionalScaling($sourceFile, $targetFile = null, $scale = 1)
    {
        // 获取图片信息（宽度、高度、类型）
        list($width, $height, $type) = getimagesize($sourceFile);
        $sourceImg = null;

        //根据类型加载图片
        switch ($type) {
            case IMAGETYPE_JPEG:
                $sourceImg = imagecreatefromjpeg($sourceFile);
                break;
            case IMAGETYPE_PNG:
                $sourceImg = imagecreatefrompng($sourceFile);
                break;
            case IMAGETYPE_GIF:
                $sourceImg = imagecreatefromgif($sourceFile);
                break;
        }

        if ($sourceImg === null) {
            throw new Exception('图片异常！');
        }

        // 等比缩放
        $size = min($width, $height);
        if ($scale == 1 || $scale <= 0) {
            $scale = min($size / $width, $size / $height);
        }
        $newWidth = $width * $scale;
        $newHeight = $height * $scale;

        // 创建一个新的正方形图片资源，默认是黑色
        $squareImg = imagecreatetruecolor($size, $size);
        // 关闭混色模式，以完全透明的方式填充
        imagealphablending($squareImg, false);
        // 分配一个完全透明的颜色
        $transparent = imagecolorallocatealpha($squareImg, 0, 0, 0, 127);
        // 使用透明颜色填充图像
        imagefill($squareImg, 0, 0, $transparent);
        // 设置图片保存时保留透明度信息
        imagesavealpha($squareImg, true);

        // 将源图像缩放到新的尺寸
        imagecopyresampled($squareImg, $sourceImg, 0, 0, 0, 0, $newWidth, $newHeight, $width, $height);

        // 保存正方形图片
        if ($targetFile === null) {
            //如果没有指定目标文件，直接输出到浏览器
            header('Content-Type: image/png');
            imagejpeg($squareImg);
        } else {
            //保存到目标文件
            imagejpeg($squareImg, $targetFile);
        }
        //释放内存
        imagedestroy($sourceImg);
        imagedestroy($squareImg);
    }

    /**
     * 合成新图并备份
     * @param $card [背景图]
     * @param $img [需要合成的图]
     * @param $X [左边距]
     * @param $Y [上边距]
     * @param $big [边框]
     * @param $set_width [需要合成的图大小]
     * @return array
     */
    protected static function makeUpImg($card, $img, $X, $Y, $big = 100, $set_width = 0)
    {
        $card_res = self::getWH($card);
        $img_res = self::getWH($img);

        // 白框宽度
        $qr_card_width = $card_res["width"] / 3;

        if ($set_width) {
            $qr_card_width = $set_width;
        }

        // 白框的宽度缩放比
        $scale = $img_res["width"] / $qr_card_width;

        // 白框的高度
        $qr_card_height = $img_res["height"] / $scale;

        // 左边距为0，设置图片居中
        if ($X == 0) {
            // 未设置图片大小使用默认值
            if ($set_width == 0) {
                $X = ($card_res["width"] - $img_res["width"]) / 2;
            } else {
                $X = ($card_res["width"] - $set_width) / 2;
            }
        }

        // 合成一张新图片(目标图像资源,源图像资源,目标图像中放置源图像的起始坐标,源图像中裁剪区域的起始坐标,目标图像中缩放后的尺寸,源图像中裁剪区域的原始尺寸)
        imagecopyresampled($card, $img, $X, $Y, 0, 0, $qr_card_width + $big, $qr_card_height + $big, $img_res["width"], $img_res["height"]);

        return ["card" => $card, "img" => $img];
    }

    /**
     * 获取图片的高宽
     * @param $img
     * @return array
     */
    protected static function getWH($img)
    {
        // 宽度
        $img_width = imagesx($img);

        // 高度
        $img_height = imagesy($img);

        return ['code' => 1, 'msg' => '获取成功', "width" => $img_width, "height" => $img_height];
    }

    /**
     * 添加文字到图片上
     * @param $card
     * @param $str
     * @param $X
     * @param $Y
     * @param $size
     * @return array|void
     */
    protected static function addFont($card, $str = "", $X = 0, $Y = 0, $size = 24)
    {
        if (!$str) {
            return ["code" => 0, "msg" => "没有需要添加的文字"];
        }

        if (strlen($str) > 40) {
            $str = substr($str, 0, 40);
        }

        $card_res = self::getWH($card);

        $font = './template/msyh.ttf'; // 文字字体

        //        $font = $_SERVER ['DOCUMENT_ROOT'].'/template/msyh.ttf';

        $font_size = $size;

        $color_r = 0; // 红

        $color_g = 0; // 绿

        $color_b = 0; // 蓝

        $color_a = 0; // 透明度

        $col = imagecolorallocatealpha($card, $color_r, $color_g, $color_b, $color_a);

        // 获取文字信息
        $text_info = self::get_text_info($font_size, 0, $font, $str);

        // 左边距为0，设置文字居中
        if ($X == 0) {
            $X = ($card_res['width'] - $text_info['w']) / 2;
        }

        // 添加文字到card上
        imagettftext($card, $font_size, 0, $X, $Y, $col, $font, $str);
    }

    /**
     * 添加文字到图片上（默认白色）
     * @param $card [背景图]
     * @param $str [文字]
     * @param $Y [上边距]
     * @param $X [左边距]
     * @param $font_size [文字大小]
     * @param $color_r [红色]
     * @param $color_g [绿色]
     * @param $color_u [蓝色]
     * @param $color_a [透明度。透明度100%时（对应255灰，白色）表示该像素完全显示，透明度0%时（对应0灰，黑色）表示该像素完全不显示，其他透明度1%-99%时将按比例地进行“比例透明显示”。]
     * @return array|void
     */
    protected static function addFont_b($card, $str = "", $strlen = 50, $X = 0, $Y = 0, $font_size = 24, $color_r = 255, $color_g = 255, $color_u = 255, $color_a = 0)
    {
        if (!$str) {
            return ["code" => 0, "msg" => "没有需要添加的文字"];
        }

        if (strlen($str) > $strlen) {
            $str = substr($str, 0, $strlen);
        }

        $card_res = self::getWH($card);

        $font = './template/msyh.ttf'; // 文字字体

        $fontStyle = 1; // 0 为普通，1 为加粗

        $col = imagecolorallocatealpha($card, $color_r, $color_g, $color_u, $color_a);

        // 获取文字信息
        $text_info = self::get_text_info($font_size, 0, $font, $str);

        // 左边距为0，设置文字居中
        if ($X == 0) {
            $X = ($card_res['width'] - $text_info['w']) / 2;
        }

        // 添加文字到card上
        imagettftext($card, $font_size, 0, $X, $Y, $col, $font, $str);
    }

    /**
     * 获取文字信息
     * @param $size
     * @param $angle
     * @param $font
     * @param $text
     * @return array
     */
    protected static function get_text_info($size, $angle, $font, $text)
    {
        //获取文字信息
        $info = imagettfbbox($size, $angle, $font, $text);
        $minx = min($info[0], $info[2], $info[4], $info[6]);
        $maxx = max($info[0], $info[2], $info[4], $info[6]);
        $miny = min($info[1], $info[3], $info[5], $info[7]);
        $maxy = max($info[1], $info[3], $info[5], $info[7]);

        /* 计算文字初始坐标和尺寸 */
        return array(
            'x' => $minx,
            'y' => abs($miny),
            'w' => $maxx - $minx,
            'h' => $maxy - $miny,
        );
    }

    /**
     * 生成新图保存
     * @param $card
     * @param $file_name
     * @param $file_dir
     * @return string
     */
    protected static function newImg($card, $file_name = "", $file_dir = "")
    {
        $imgname = $file_name;

        $file_path = $file_dir . $imgname;

        if (!file_exists($file_dir)) {
            if (!mkdir($file_dir, 0755, true) && !is_dir($file_dir)) {
                throw new \RuntimeException(sprintf('Directory "%s" was not created', $file_dir));
            }
        }

        // 删除文件
        if (file_exists($file_path)) {
            unlink($file_path);
        }

        $dir = str_replace("./", "/", $file_dir);
        $card_url = $dir . $imgname;

        // 生成png图,并保存到 file_path
        imagepng($card, $file_path);

        // 返回图片路径
        /*$url = replace_url($card_url);
        return $url;*/
        return $card_url;
    }

    // 微信小程序appid
    private static $appid = "wx81cdfa13e414c022";

    // 微信小程序密钥
    private static $secret = "8ce46a802107a7fe965ac0cf0807cf91";

    public static function createCodeImg($invite_code, $invite_type = 0, $invite_store = 0, $page = "")
    {
        $poster_name = $invite_code . "_invite_code.png";
        $poster_dir = './uploads/wxqrcode/invite_code/';
        // 小程序二维码
        $qrName = $invite_code . '.png';
        $qr_path = "./uploads/wxqrcode/" . $qrName;
        $file_path = "./uploads/wxqrcode/" . $poster_name;

        // 1、检查小程序二维码在不在，不在的话生成一个二维码
        if (!file_exists($qr_path)) {
            if (!$page) {
                $page = "/userPages/login/login?invite_code=" . $invite_code . "&invite_type=" . $invite_type;
                if ($invite_store) {
                    $page .= "&invite_store=" . $invite_store;
                }
            }
            self::getNewImage($qrName, $page, $file_path);
        }

        // 2、检查推广码在不在，不在的话重新剪裁一个二维码
        if (!file_exists($file_path)) {
            // 剪裁图片
            self::cutpicture($qr_path, $file_path);
        }

        // 二维码路径转换图像数据流
        $qrData = self::getImgData($file_path);
        $qrImg = $qrData["data"];

        // 生成新图保存
        $url = self::newImg($qrImg, $poster_name, $poster_dir);

        return $url . '?time=' . time();
    }

    /**
     * 生成小程序二维码并剪裁图片
     * @param $filename [小程序二维码]
     * @param $page [小程序路径]
     * @param $new_filename [剪裁后的图片]
     * @return void
     * @throws \Exception
     */
    public static function getNewImage($filename = '', $page = '', $new_filename = '')
    {
        $rs = self::createwxaqrcode($filename, $page);
        $file_path = '.' . $rs['data'];
        // 剪裁图片
        self::cutpicture($file_path, $new_filename);
    }

    /**
     * 剪裁图片
     * @param $file_path [需要剪裁的图片]
     * @param $new_filename [剪裁后的图片]
     * @return void
     * @throws \Exception
     */
    public static function cutpicture($file_path, $new_filename)
    {
        // 创建一个新的图片资源
        $image_info = getimagesize($file_path);
        switch ($image_info['mime']) {
            case 'image/png':
                // 处理PNG文件
                $image = imagecreatefrompng($file_path);
                break;
            case 'image/jpeg':
                // 处理JPEG文件
                $image = imagecreatefromjpeg($file_path);
                break;
            case 'image/gif':
                // 处理GIF文件
                $image = imagecreatefromgif($file_path);
                break;
            default:
                // 其他类型的文件
                throw new \Exception('Unsupported image format: ' . $image_info['mime']);
        }

        // 创建裁剪后的图片资源
        $croppedImage = imagecreatetruecolor(445, 445);

        // 进行裁剪操作
        /*$dst_x‌：目标图像中复制内容的起始横坐标。
        $dst_y‌：目标图像中复制内容的起始纵坐标。
        $src_x‌：源图像中复制内容的起始横坐标。
        $src_y‌：源图像中复制内容的起始纵坐标。
        $src_width‌：要复制的源图像区域的宽度。
        $src_height‌：要复制的源图像区域的高度。*/
        imagecopy($croppedImage, $image, 0, 0, 5, 5, 450, 450);

        // 保存裁剪后的图片
        imagejpeg($croppedImage, $new_filename);

        // 释放图片资源
        imagedestroy($image);
        imagedestroy($croppedImage);
    }

    /**
     * 生成小程序普通二维码
     * @param $filename
     * @param $page
     * @return array
     */
    public static function createwxaqrcode($filename = "", $page = "")
    {
        // 文件目录
        $dir = "./uploads/wxqrcode/"; // 生成图片使用
        $dir1 = "/uploads/wxqrcode/"; // 返回使用

        // 文件名
        if (!$filename) {
            $filename = date("YmdHis") . mt_rand(100, 999) . ".png";
        }

        $fullPath = $dir . $filename;

        // 创建文件目录
        $path = dirname($fullPath);
        !is_dir($path) && mkdir($path, 0755, true);

        $session_id = session_id();
        if (!$session_id) {
            // 开启session
            session_start();
        }

        // 保存8小时:cookie
        $lifeTime = 8 * 3600;
        setcookie(session_name(), session_id(), time() + $lifeTime, "/");


        $access_token = \app\common\utils\WechatUtil::getAccessToken(self::$appid, self::$secret);

        // 已经有token,生成二维码
        if (!empty($access_token)) {
            // 调用微信小程序二维码接口
            $url = 'https://api.weixin.qq.com/cgi-bin/wxaapp/createwxaqrcode?access_token=' . $access_token;

            if (!$page) {
                $page = "pages/tabbar/index/index";
            }
            // 生成二维码的页面路由
            $data = [];
            $data['path'] = $page;
            $data['width'] = 430;

            // post 请求:获取成功后，得到二维码内容
            $result = self::curlPost($url, $data, 'POST');
            if (isset($result["errcode"])) {
                return ["code" => 0, "msg" => "二维码获取失败", "data" => $result];
            }

            // 将图片内容写入文件，形成一张图片
            $res = file_put_contents($fullPath, $result, true);

            $file = $dir1 . $filename;
            return ["code" => 1, "msg" => "二维码生成成功", "data" => $file];
        } else {
            return ["code" => 0, "msg" => "二维码生成失败,access_token不存在"];
        }
    }

    /**
     * get请求
     * @param  [type] $url    [description]
     * @param array $data [description]
     * @param string $method [description]
     * @return [type]         [description]
     */
    private static function getJson($url, $data = array(), $method = 'GET')
    {
        $ch = curl_init();//1.初始化

        curl_setopt($ch, CURLOPT_URL, $url);//2.请求地址

        curl_setopt($ch, CURLOPT_CUSTOMREQUEST, $method);//3.请求方式

        //4.参数如下
        curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);

        curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE);

        //5.post方式的时候添加数据
        if ($method == "POST") {

            $data = json_encode($data);

            curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
        }

        curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);

        $output = curl_exec($ch);

        curl_close($ch);

        return json_decode($output, true);
    }

    /**
     * post 请求
     * @param  [type] $url    [description]
     * @param  [type] $data   [description]
     * @param  [type] $method [description]
     * @return [type]         [description]
     */
    private static function curlPost($url, $data, $method)
    {
        $ch = curl_init();   //1.初始化

        curl_setopt($ch, CURLOPT_URL, $url); //2.请求地址

        curl_setopt($ch, CURLOPT_CUSTOMREQUEST, $method);//3.请求方式

        //4.参数如下
        curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);//https

        curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE);

        curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/5.0 (compatible; MSIE 5.01; Windows NT 5.0)');//模拟浏览器
        curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);

        curl_setopt($ch, CURLOPT_AUTOREFERER, 1);
        $header = array(
            'Accept-Encoding' => 'gzip, deflate',//gzip解压内容
//            'User-Agent' => 'Apifox/1.0.0 (https://apifox.com)',
            'Content-Type' => 'application/json'
        );
        curl_setopt($ch, CURLOPT_HTTPHEADER, $header);
        curl_setopt($ch, CURLOPT_ENCODING, 'gzip,deflate');

        if ($method == "POST") {//5.post方式的时候添加数据
            $data = json_encode($data);
            curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
        }

        curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);

        $tmpInfo = curl_exec($ch);//6.执行

        if (curl_errno($ch)) {//7.如果出错
            return curl_error($ch);
        }

        curl_close($ch);//8.关闭

        return $tmpInfo;
    }
}